Skip to main content

Authoring Bundle

It is possible to collect one or more custom entities into a package that can be installed onto a site. We call these packages a bundle. Bundles contain a definition for tables, menus and pages. When installed they add their definitions to the site.

Tables that collide with existing Tables will abort the installation of a bundle. Pages that collide will be replaced. Menus will never collide and are simply additive.

Bundles can be generated from a site that already has tables/pages/menus configured using the Download feature. See Bundle Installation.

Bundle Contents

A bundle contains the definition for one or more entities, notably including

Template Bundle JSON

| Syntax Rules | List Title & ListName = Plural Table = Singular Lookups reference the LISTNAME Lookups and User fields require _id in their column names List titles/names are Title Case Field titles are sentence case No spaces in column names or in table names

//Bundle Header
{
"$schema": "./Bundle.schema.json",
"Name": "<BundleName>",
"Author": "<AuthorName> <<AuthorEmail>>",
"Description": "<Description>",
"Version": "1.0",
"Pages": {},
"Lists": [

//List Header
{
"Title": "",
"ListName": "",
"ListNameSingular": "",
"Searchable": true,
"ShortName": "",
"Table": "",
"SystemManaged": false,
"Fields": [

//Single Text Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Text",
"Searchable": true
},

//Multi Line Text Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Note"
},

//DateTime Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "DateTime"
},

//Choice Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Choice",
"Settings": {
"Choices": [
{
"Text": "",
"AccentColour": "rgb(0, 0, 0)"
},
{
"Text": "",
"AccentColour": "black"
},
{
"Text": "",
"AccentColour": "#000000"
}
]
}
},

//Lookup Field
{
"Title": "",
"ColumnName": "_id",
"Description": "",
"FieldType": "Lookup",
"Settings": {
"LookupList": "",
"LookupField": ""
},
"Searchable": true
},

//Boolean Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Boolean"
},

//Number Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Number"
},

//Percentage Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Percentage"
},

//Currency Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Currency"
},

//User Field
{
"Title": "",
"ColumnName": "_id",
"Description": "",
"FieldType": "User",
"Searchable": true
},

//Whole Number Field
{
"Title": "",
"ColumnName": "",
"Description": "",
"FieldType": "Integer"
},

//Query
{
"Title": "Query",
"ColumnName": "query",
"SystemManaged": false,
"FieldType": "Subquery",
"Nullable": true,
"Searchable": true,
"Settings": {
"Choices": [],
"Query": "SELECT 10+1",
"DisplayAs": "Currency"
}
},

//Entity Tail
]
}

//Bundle Tail
]
}

ADVANCED Bundle Installation